package com.allwees.core.wf;

import com.allwees.core.common.constant.EStatus;

import java.io.Serializable;

/**
 * 触发工作流变迁的动作
 *
 * @author yangylsky
 *
 */
public interface Action extends Serializable {
	/**
	 * 当前状态的唯一名称
	 *
	 * @return
	 */
	String name();

	/**
	 * 当前状态的描述
	 *
	 * @return
	 */
	default String desc() {
		return "";
	}

	/**
	 * 动作执行后Entity需设置的状态
	 *
	 * @return
	 */
	default EStatus afterActionStatus() {
		return null;
	}

	/**
	 * bizType默认为'WF.'+Action的class simple name(去掉开头的枚举标识字符'E')，如：ERetailerProductAction.RETAILER_COMMIT -> WF.RetailerProductAction
	 *
	 * @return
	 */
	default String bizType() {
		if(!getClass().isEnum()) {
			return "";
		}
		String bizType = getClass().getSimpleName();
		if(bizType.startsWith("E")) {
			bizType = bizType.substring(1);
		}
		return "WF." + bizType;
//		return RegExUtils.replaceAll(getClass().getSimpleName(), ".*(?<=E)(.*)+?(Action$)", "$1.") + this.name().toLowerCase();
	}

	/**
	 * routingKey默认为Action的name，如：ERetailerProductAction.RETAILER_COMMIT -> RETAILER_COMMIT
	 *
	 * @return
	 */
	default String routingKey() {
		if(!getClass().isEnum()) {
			return "";
		}
		return this.name();
	}
}
